/**
 * 
 */
package com.study.demo;

/**
 * @author Administrator
 * @date 2019年4月28日
 */

class A {
	// Object.wait()和Object.notify()和Object.notifyall()必须写在synchronized方法内部或者synchronized块内部，
	// 这是因为：这几个方法要求当前正在运行object.wait()方法的线程拥有object的对象锁。
	public synchronized void printThreadInfo() throws InterruptedException {

		Thread t = Thread.currentThread();

		System.out.println("ThreadID:" + t.getId() + ", ThreadName:" + t.getName());

		// this.wait();//一直等待

		this.wait(1000);// 等待1000ms  
		//如果printThreadInfo方法没有synchronized 修饰, 则会报java.lang.IllegalMonitorStateException

		// super.wait(1000);

	}

}

public class ObjectWaitTest {

	public static void main(String args[]) {

		A a = new A();

		// 因为printThreadInfo()方法抛出InterruptedException异常，所以这里必须使用try-catch块

		try {

			a.printThreadInfo();

			// a.wait();

		} catch (InterruptedException e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

		}

		Thread t = Thread.currentThread();

		System.out.println("ThreadID  :" + t.getId() + ", ThreadName:" + t.getName());

	}

}